package guet.imagan.progbuilder.impl;

import guet.imagan.progbuilder.Project;
import guet.imagan.progbuilder.TextFile;
import guet.imagan.util.FileUtil;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.List;

public class JavaProject extends DefaultProject {
	/**
	 * 根据项目根目录及源文件扩展名创建Project对象
	 *
	 * @param path       项目根目录
	 * @param srcFileExt 源文件扩展名
	 */
	public JavaProject(File path, String srcFileExt) throws ProjectException {
		super(path, srcFileExt);
	}

	/**
	 * 根据源文件列表创建Project对象
	 *
	 * @param srcFiles 源文件列表
	 */
	public JavaProject(List<File> srcFiles) throws ProjectException {
		super(srcFiles);
	}

	/**
	 * 对于混合编程语言项目，该方法返回启动项目的字符串。
	 * 例如，java语言，该方法应该返回主类
	 * 对于Python语言，该方法应该返回主模块文件名的完整路径
	 *
	 * @return
	 */
	@Override
	public String resolveMain() {
		try {
			File mainFile=super.getMainFile();
			String packageName=GetPackageName(mainFile);
			String className= FileUtil.getFileBasicName(mainFile);
			return packageName+"."+className;
		} catch (ProjectException e) {
			return "";
		} catch (FileNotFoundException e) {
			return "";
		}
	}

	/**
	 * 返回一个项目源文件所在的包名,若无报名，则返回空字符串
	 * @param srcFile 源文件
	 * @return 包名
	 */
	public static String GetPackageName(File srcFile) throws FileNotFoundException {
		TextFile file=new TextFile(srcFile);
		List<String>contents=file.getContent();
		for(String s: contents){
			s = s.trim();
			if(s.startsWith("package ")){
				int startPos="package".length();
				String packageName = s.substring(startPos);
				packageName = packageName.trim();
				packageName=packageName.substring(0,packageName.length()-1);
				return packageName;
			}else if(s.startsWith("import")){
				return "";
			}else if(s.contains(" class ")){
				return "";
			}
		}
		return "";
	}
}
